//package com.jhx.demos.web.aop;
//
//import com.alibaba.fastjson.JSONObject;
//import com.jhx.demos.web.Utils.JwtUtils;
//import com.jhx.demos.web.mapper.OperateLogMapper;
//import com.jhx.demos.web.pojo.OperateLog;
//import io.jsonwebtoken.Claims;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.expression.Operation;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.http.HttpServletRequest;
//import java.time.LocalDateTime;
//import java.util.Arrays;
//
//@Slf4j
//@Component
//@Aspect
//public class LogAspect {
//
//    //拿到当前请求对象
//    @Autowired
//    private HttpServletRequest Request;
//
//    //注入mapper接口操作
//    @Autowired
//    private OperateLogMapper operateLogMapper;
//
//    @Around("@annotation(com.jhx.demos.web.anno.Log)") //匹配加上Log注释的方法
//    public Object recordLog(ProceedingJoinPoint joinPoint) throws Throwable {
//
//        //获取jwt令牌并解析
//        String jwt = Request.getHeader("token");
//        Claims claims = JwtUtils.parseJWT(jwt);
//        Integer operateUser = (Integer) claims.get("id");
//
//        //操作时间
//        LocalDateTime operateTime = LocalDateTime.now();
//
//        //操作类名
//        String className = joinPoint.getTarget().getClass().getName();
//
//        //操作方法名
//        String methodName = joinPoint.getSignature().getName();
//
//        //操作方法参数
//        Object[] args = joinPoint.getArgs();
//        String methodParams = Arrays.toString(args);//将这个数组转为字符串形式
//
//        long begin = System.currentTimeMillis();
//
//        //调用原始目标方法运行
//        Object result = joinPoint.proceed();
//
//        long end = System.currentTimeMillis();
//
//        //方法返回值
//        String returnValues = JSONObject.toJSONString(result);//将此对象转成json文件格式
//
//        //操作耗时
//        Long costTime=end-begin;
//
//        //记录操作日志
//        OperateLog operateLog = new OperateLog(null,operateUser,operateTime,className,methodName,methodParams,returnValues,costTime);
//        operateLogMapper.insert(operateLog);
//
//        log.info("AOP记录操作日志",operateLog);
//
//        return result;
//
//
//    }
//
//}
